# misc.fun_sa -- areasink functions
#
# Copyright (c) 2001, Willem Jan Zaadnoordijk

from geometry    import XY

import popen2    # pipe open 2 (1 for input + 1 for output)


fiSA,foSA=popen2.popen2('SAPQ01.exe')

def sap0(vertices,xy):
	'''influence function for steady Areasink potential'''
	foSA.write('0 0\n')
	ain=str(xy.x)+' '+str(xy.y)+' '+     \
	    str(vertices[0].x)+' '+str(vertices[0].y)+' '+ \
	    str(vertices[1].x)+' '+str(vertices[1].y)+' '+ \
	    str(vertices[2].x)+' '+str(vertices[2].y)+' '+ \
	    str(vertices[3].x)+' '+str(vertices[3].y)+'\n'
	foSA.write(ain)
	aout=fiSA.readline()
	p0=eval(aout)
	return (p0)

def saq0(vertices,xy):
	'''influence function for steady Areasink discharge'''
	q0=XY(-9999,-9999)
	foSA.write('1 0\n')
	ain=str(xy.x)+' '+str(xy.y)+' '+     \
	    str(vertices[0].x)+' '+str(vertices[0].y)+' '+ \
	    str(vertices[1].x)+' '+str(vertices[1].y)+' '+ \
	    str(vertices[2].x)+' '+str(vertices[2].y)+' '+ \
	    str(vertices[3].x)+' '+str(vertices[3].y)+'\n'
	foSA.write(ain)
	aout=fiSA.readline()
	q0.x=eval(aout)
	aout=fiSA.readline()
	q0.y=eval(aout)
	return (q0)

def sap1(vertices,xyw,tt,rp):
	'''influence function for step Areasink potential'''
	foSA.write('0 1\n')
	ain=str(xyw.x)+' '+str(xyw.y)+' '+str(tt)+' '+     \
	    str(vertices[0].x)+' '+str(vertices[0].y)+' '+ \
	    str(vertices[1].x)+' '+str(vertices[1].y)+' '+ \
	    str(vertices[2].x)+' '+str(vertices[2].y)+' '+ \
	    str(vertices[3].x)+' '+str(vertices[3].y)+' '+ \
	    str(rp)+'\n'
	foSA.write(ain)
	aout=fiSA.readline()
	p1=eval(aout)
	return (p1)

def saq1(vertices,xyw,tt,rp):
	'''influence function for step Areasink discharge'''
	q1=XY(-9999,-9999)
	foSA.write('1 1\n')
	ain=str(xyw.x)+' '+str(xyw.y)+' '+str(tt)+' '+     \
	    str(vertices[0].x)+' '+str(vertices[0].y)+' '+ \
	    str(vertices[1].x)+' '+str(vertices[1].y)+' '+ \
	    str(vertices[2].x)+' '+str(vertices[2].y)+' '+ \
	    str(vertices[3].x)+' '+str(vertices[3].y)+' '+ \
	    str(rp)+'\n'
	foSA.write(ain)
	aout=fiSA.readline()
	q1.x=eval(aout)
	aout=fiSA.readline()
	q1.y=eval(aout)
	return (q1)
